﻿// Portions copyright 2006, 2007 - Rory Plaire (codekaizen@gmail.com)
// Portions copyright 2007, 2008 - Ariel Yaroshevich (a.k.a blackrussian) (hamlet@inter.net.il)
// This file is part of SharpMap.
// SharpMap is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
// 
// SharpMap is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Lesser General Public License for more details.

// You should have received a copy of the GNU Lesser General Public License
// along with SharpMap; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 

using System;
using System.Collections.Generic;
using System.Text;
using SharpMap.Rendering.Rendering2D;
using System.Windows.Media;
using System.Threading;


namespace SharpMap.Wpf.Rendering
{
    public class TextRenderer :  TextRenderer2D<Drawing>
    {

        public override IEnumerable<Drawing> RenderText(String text, SharpMap.Styles.StyleFont font, Rectangle2D layoutRectangle, Path2D flowPath, SharpMap.Styles.StyleBrush fontBrush, Matrix2D transform)
            {
                
                //TODO: flow path
                
                FormattedText fText = new FormattedText(text, Thread.CurrentThread.CurrentCulture
                    , System.Windows.FlowDirection.LeftToRight, ViewConverter.Convert(font), ViewConverter.ConvertPointsToFontSize(font.Size.Width), ViewConverter.Convert(fontBrush));


                
               

                //renderedObject.Bounds = ViewConverter.Convert(layoutRectangle);

                //renderedObject.AffineTransform = ViewConverter.Convert(transform);
                System.Windows.Point origin = ViewConverter.Convert(layoutRectangle.UpperLeft);
                System.Windows.Media.Brush brush = ViewConverter.Convert(fontBrush);
                Geometry geometry = fText.BuildGeometry(origin);
                GeometryDrawing renderedObject = new GeometryDrawing(brush,null,geometry);
                yield return renderedObject;
            }

            public override Size2D MeasureString(String text, SharpMap.Styles.StyleFont font)
            {
                FormattedText fText = new FormattedText(text, Thread.CurrentThread.CurrentCulture
        , System.Windows.FlowDirection.LeftToRight, ViewConverter.Convert(font), ViewConverter.ConvertPointsToFontSize(font.Size.Width), Brushes.Black);
                Size2D size = new Size2D(fText.WidthIncludingTrailingWhitespace, fText.Height);
                return size;

            }
        }
    
}
